//
// Created by 86178 on 2025-04-08.
//

#ifndef DATA_STRUCT_CODE_CIRCULARLINKLIST_H
#define DATA_STRUCT_CODE_CIRCULARLINKLIST_H

class CircularLinkList {
public:
    CircularLinkList();

    ~CircularLinkList();

    // 基本功能
    int Size() const;

    bool Empty() const;

    void Clear();

    // 插入和删除
    void PushFront(int value);       // 头插
    void PushBack(int value);        // 尾插
    void PopFront();                 // 删除头节点
    void PopBack();                  // 删除尾节点
    void Insert(int pos, int value); // 指定位置插入（1-based）

    void Remove(int value);          // 删除第一个匹配值
    void RemoveAll(int value);       // 删除所有匹配值

    // 查找与修改
    int Get(int pos) const;          // 获取第 pos 个位置的值
    void Set(int pos, int value);    // 设置第 pos 个位置的值
    bool Find(int value) const;      // 查找值是否存在

    // 打印
    void Print() const;

private:
    struct Node {
        int data;
        Node *next;

        Node(int val) : data(val), next(nullptr) {}
    };

    Node *tail_; // 指向尾节点，tail_->next 是头节点
    int size_;
};


#endif //DATA_STRUCT_CODE_CIRCULARLINKLIST_H
